{
 "cells": [
  {
   "cell_type": "code",
   "id": "initial_id",
   "metadata": {
    "collapsed": true,
    "ExecuteTime": {
     "end_time": "2025-06-09T15:12:56.127907Z",
     "start_time": "2025-06-09T15:10:21.116022Z"
    }
   },
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "from sklearn.metrics import accuracy_score, confusion_matrix\n",
    "import torchvision\n",
    "import torchvision.transforms as transforms\n",
    "def load_mnist():\n",
    "    transform = transforms.Compose([\n",
    "        transforms.ToTensor(),\n",
    "        transforms.Normalize((0.5,), (0.5,))\n",
    "    ])\n",
    "    trainset = torchvision.datasets.MNIST(root='./data', train=True, download=True, transform=transform)\n",
    "    testset = torchvision.datasets.MNIST(root='./data', train=False, download=True, transform=transform)\n",
    "    return trainset, testset\n",
    "\n",
    "def load_cifar10():\n",
    "    transform = transforms.Compose([\n",
    "        transforms.ToTensor(),\n",
    "        transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))\n",
    "    ])\n",
    "    trainset = torchvision.datasets.CIFAR10(root='./data', train=True, download=True, transform=transform)\n",
    "    testset = torchvision.datasets.CIFAR10(root='./data', train=False, download=True, transform=transform)\n",
    "    return trainset, testset\n",
    "\n",
    "def dataset_to_numpy(dataset, flatten=True):\n",
    "    X = []\n",
    "    y = []\n",
    "    for img, label in dataset:\n",
    "        arr = img.numpy()\n",
    "        if flatten:\n",
    "            arr = arr.flatten()\n",
    "        else:\n",
    "            arr = arr.transpose(1, 2, 0)\n",
    "        X.append(arr)\n",
    "        y.append(label)\n",
    "    X = np.array(X)\n",
    "    y = np.array(y)\n",
    "    return X, y\n",
    "\n",
    "mnist_train, mnist_test = load_mnist()\n",
    "cifar_train, cifar_test = load_cifar10()\n",
    "print(f\"MNIST训练集样本数: {len(mnist_train)}，测试集样本数: {len(mnist_test)}\")\n",
    "print(f\"CIFAR-10训练集样本数: {len(cifar_train)}，测试集样本数: {len(cifar_test)}\")\n"
   ],
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 170M/170M [02:29<00:00, 1.14MB/s] \n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "MNIST训练集样本数: 60000，测试集样本数: 10000\n",
      "CIFAR-10训练集样本数: 50000，测试集样本数: 10000\n"
     ]
    }
   ],
   "execution_count": 3
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-09T15:13:19.680245Z",
     "start_time": "2025-06-09T15:13:08.731227Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# MNIST\n",
    "X_train_m, y_train_m = dataset_to_numpy(mnist_train)\n",
    "X_test_m, y_test_m = dataset_to_numpy(mnist_test)\n",
    "# CIFAR-10\n",
    "X_train_c, y_train_c = dataset_to_numpy(cifar_train)\n",
    "X_test_c, y_test_c = dataset_to_numpy(cifar_test)\n",
    "# 只取部分样本\n",
    "n_samples = 5000\n",
    "X_train_m, y_train_m = X_train_m[:n_samples], y_train_m[:n_samples]\n",
    "X_test_m, y_test_m = X_test_m[:1000], y_test_m[:1000]\n",
    "X_train_c, y_train_c = X_train_c[:n_samples], y_train_c[:n_samples]\n",
    "X_test_c, y_test_c = X_test_c[:1000], y_test_c[:1000]\n",
    "# 标准化\n",
    "scaler_m = StandardScaler().fit(X_train_m)\n",
    "X_train_m = scaler_m.transform(X_train_m)\n",
    "X_test_m = scaler_m.transform(X_test_m)\n",
    "scaler_c = StandardScaler().fit(X_train_c)\n",
    "X_train_c = scaler_c.transform(X_train_c)\n",
    "X_test_c = scaler_c.transform(X_test_c)"
   ],
   "id": "a71bfa647a6727c1",
   "outputs": [],
   "execution_count": 4
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-09T15:13:24.546544Z",
     "start_time": "2025-06-09T15:13:22.446714Z"
    }
   },
   "cell_type": "code",
   "source": [
    "def train_and_evaluate(model, X_train, y_train, X_test, y_test):\n",
    "    model.fit(X_train, y_train)\n",
    "    y_pred = model.predict(X_test)\n",
    "    acc = accuracy_score(y_test, y_pred)\n",
    "    cm = confusion_matrix(y_test, y_pred)\n",
    "    return acc, cm, y_pred\n",
    "\n",
    "# MNIST\n",
    "lr_mnist = LogisticRegression(max_iter=100)\n",
    "acc_m, cm_m, y_pred_m = train_and_evaluate(lr_mnist, X_train_m, y_train_m, X_test_m, y_test_m)\n",
    "print(f\"MNIST 逻辑回归准确率: {acc_m:.3f}\")\n",
    "# CIFAR-10\n",
    "lr_cifar = LogisticRegression(max_iter=100)\n",
    "acc_c, cm_c, y_pred_c = train_and_evaluate(lr_cifar, X_train_c, y_train_c, X_test_c, y_test_c)\n",
    "print(f\"CIFAR-10 逻辑回归准确率: {acc_c:.3f}\")"
   ],
   "id": "d0f9b3c06db0059a",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "MNIST 逻辑回归准确率: 0.874\n",
      "CIFAR-10 逻辑回归准确率: 0.274\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\python\\Lib\\site-packages\\sklearn\\linear_model\\_logistic.py:465: ConvergenceWarning: lbfgs failed to converge (status=1):\n",
      "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n",
      "\n",
      "Increase the number of iterations (max_iter) or scale the data as shown in:\n",
      "    https://scikit-learn.org/stable/modules/preprocessing.html\n",
      "Please also refer to the documentation for alternative solver options:\n",
      "    https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n",
      "  n_iter_i = _check_optimize_result(\n"
     ]
    }
   ],
   "execution_count": 6
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-09T15:15:16.848795Z",
     "start_time": "2025-06-09T15:15:16.468717Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 准确率柱状图\n",
    "plt.figure(figsize=(5,4))\n",
    "plt.bar(['MNIST', 'CIFAR-10'], [acc_m, acc_c])\n",
    "plt.ylabel('Accuracy')\n",
    "plt.title('逻辑回归在不同数据集上的准确率')\n",
    "plt.show()\n",
    "# 混淆矩阵\n",
    "fig, axes = plt.subplots(1,2, figsize=(12,5))\n",
    "axes[0].imshow(cm_m, cmap=plt.cm.Blues)\n",
    "axes[0].set_title('MNIST 混淆矩阵')\n",
    "axes[1].imshow(cm_c, cmap=plt.cm.Blues)\n",
    "axes[1].set_title('CIFAR-10 混淆矩阵')\n",
    "for ax in axes:\n",
    "    ax.set_xlabel('Predicted')\n",
    "    ax.set_ylabel('True')\n",
    "plt.tight_layout()\n",
    "plt.show()"
   ],
   "id": "eee47cfb366df3dd",
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\python\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 36923 (\\N{CJK UNIFIED IDEOGRAPH-903B}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\python\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 36753 (\\N{CJK UNIFIED IDEOGRAPH-8F91}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\python\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 22238 (\\N{CJK UNIFIED IDEOGRAPH-56DE}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\python\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 24402 (\\N{CJK UNIFIED IDEOGRAPH-5F52}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\python\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 22312 (\\N{CJK UNIFIED IDEOGRAPH-5728}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\python\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 19981 (\\N{CJK UNIFIED IDEOGRAPH-4E0D}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\python\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 21516 (\\N{CJK UNIFIED IDEOGRAPH-540C}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\python\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 25968 (\\N{CJK UNIFIED IDEOGRAPH-6570}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\python\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 25454 (\\N{CJK UNIFIED IDEOGRAPH-636E}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\python\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 38598 (\\N{CJK UNIFIED IDEOGRAPH-96C6}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\python\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 19978 (\\N{CJK UNIFIED IDEOGRAPH-4E0A}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\python\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 30340 (\\N{CJK UNIFIED IDEOGRAPH-7684}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\python\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 20934 (\\N{CJK UNIFIED IDEOGRAPH-51C6}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\python\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 30830 (\\N{CJK UNIFIED IDEOGRAPH-786E}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\python\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 29575 (\\N{CJK UNIFIED IDEOGRAPH-7387}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 500x400 with 1 Axes>"
      ],
      "image/png": "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9nNmZqbtE5T+l6enp+bMmaM333xT3377bb1uOygoSNu2bdORI0dcNi/gjNOnTysnJ0cJCQl2kbzgUv5PmdVqVVZWlh577DH17NlT3bp100cffWTc58svv9TWrVvl7e3t9P39r//85z8qLi5WdHS0bZufn5+ioqLq/BpDOEYoUW+PPfaYNm/erCNHjujIkSPasmWLHnvsMYdr77vvPoWHh1/06aMLUlJS1LZtW4WFhalHjx4aN26c/vrXv6qmpsaVDwGo04EDB2S1WtWzZ0+n933xxRfVqlUr22XhwoWSpE8++UTff/+9YmJiJP30N7R48eJa+//9739Xq1at5Ovrqz59+ujkyZN6/vnnL+vxXPjqQWe+lhCOEUrUW8eOHTV8+HAtWbJEWVlZGj58uPz9/etcP2/ePC1dulR79+696G136tRJeXl52r17t6ZNm6Yff/xRY8eO1bBhw4glGsTlfEjZ888/r8LCQtslLi5O0k/PuowaNUpeXj+9yjV69Ght2bJFBw8etNt/yJAhKiws1Pbt2zV27FjFx8frgQcekCT9+9//tovwsmXLLnlOXBpCCaeMHz9eS5Ys0dKlS42v2UjS7bffrpiYGCUlJdX79nv37q3Jkyfr/fff1/r167V+/Xr961//utyxgYvq3r27LBZLnV8ab+Lv769u3brZLm3bttXp06e1atUqvf322/Ly8pKXl5dCQkL0448/1jqpp2XLlurWrZv69u2rzMxMbd++3Xbk2b9/f7sIjxgxol4zXXjN05mvJYRjhBJOGTZsmKqqqnT+/Hnb00kmc+fO1d/+9rdLek2kV69ekn46uw+40tq3b6+YmBilp6c7/J3737cy1ceyZct0zTXXaNeuXXahe+2117RkyRJVV1c73M/Dw0MzZszQzJkz9cMPP6h58+Z2EW7dunW97r9Lly4KCgqy+1rC8vJybd++na8ldBKhhFM8PT21d+9e7dmzR56enhdd36dPH40ZM8b2mk1dJk2apNmzZ2vLli06cuSItm3bpri4OHXs2JE/ajSY9PR0VVdXa+DAgfr444/1zTffaO/evVq4cKHTv4eLFy/Wgw8+qN69e9tdJkyYoNLSUuXk5NS570MPPSRPT0/jWz/Onj1ri6/008k7hYWFKioqkiRZLBY9/fTT+v3vf681a9Zo9+7diouLU3BwsEaOHOnUY2nqCCWc5uy3sc+aNeuirzNGR0dr27Zteuihh3T99dfrgQcekK+vr3Jzc9WhQ4fLHRmol65du6qgoEBDhgzRs88+q969e2vo0KHKzc3VO++8U+/byc/P165du2yvM/4vPz8/3XHHHQ5P6rnAy8tLU6ZM0fz58+t8RuXzzz9XRESEIiIiJP303b4RERFKTk62rXnhhRf01FNP6YknntCAAQN09uxZ5eTkyNfXt96PBXzNFgAARhxRAgBgQCgBADAglAAAGBBKAAAMCCUAAAaEEgAAA0IJAIABoQQAwIBQAgBgQCgBADAglAAAGBBKAAAM/h8DEgmMwPxteAAAAABJRU5ErkJggg=="
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Lenovo\\AppData\\Local\\Temp\\ipykernel_23100\\379518958.py:16: UserWarning: Glyph 28151 (\\N{CJK UNIFIED IDEOGRAPH-6DF7}) missing from font(s) DejaVu Sans.\n",
      "  plt.tight_layout()\n",
      "C:\\Users\\Lenovo\\AppData\\Local\\Temp\\ipykernel_23100\\379518958.py:16: UserWarning: Glyph 28102 (\\N{CJK UNIFIED IDEOGRAPH-6DC6}) missing from font(s) DejaVu Sans.\n",
      "  plt.tight_layout()\n",
      "C:\\Users\\Lenovo\\AppData\\Local\\Temp\\ipykernel_23100\\379518958.py:16: UserWarning: Glyph 30697 (\\N{CJK UNIFIED IDEOGRAPH-77E9}) missing from font(s) DejaVu Sans.\n",
      "  plt.tight_layout()\n",
      "C:\\Users\\Lenovo\\AppData\\Local\\Temp\\ipykernel_23100\\379518958.py:16: UserWarning: Glyph 38453 (\\N{CJK UNIFIED IDEOGRAPH-9635}) missing from font(s) DejaVu Sans.\n",
      "  plt.tight_layout()\n",
      "D:\\python\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 28151 (\\N{CJK UNIFIED IDEOGRAPH-6DF7}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\python\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 28102 (\\N{CJK UNIFIED IDEOGRAPH-6DC6}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\python\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 30697 (\\N{CJK UNIFIED IDEOGRAPH-77E9}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\python\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 38453 (\\N{CJK UNIFIED IDEOGRAPH-9635}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 1200x500 with 2 Axes>"
      ],
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABBUAAAHqCAYAAABbfXZsAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8ekN5oAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA090lEQVR4nO3de5xVBbkH/GdmgJkBBkQUhAQBLQFBRVFTCqTwUmqapXlLtPRNRUVJEo+viVe8RFlaeMnEU+AtjzfMfDmkCCmKoKYdw1sWXhBNZbjOwOz1/tFhThMwm1kDrL2Z7/fz2X/M2muv9ZvFsPczv1l77ZIkSZIAAAAAaKLSrAMAAAAAxUmpAAAAAKSiVAAAAABSUSoAAAAAqSgVAAAAgFSUCgAAAEAqSgUAAAAgFaUCAAAAkIpSAQAAAEhFqQAAAACkolSAjTB58uQoKSmJkpKSmD179jr3J0kSPXr0iJKSkjj88MMb3Lf2cRMnTtzgdp9//vn6ZePHj4+SkpL46KOPGqz7yCOPxLBhw6JLly7Rtm3b6NOnTxx77LHx+9//PiIiDjzwwPp9NXYbP378JjgiAMDW7M0334zvfe970adPn6ioqIgOHTrEkCFD4qc//WmsXLmyfr1evXptcPb599sOO+zQYL1PP/00KioqoqSkJF599dX15jjllFMabKO8vDw+97nPxQ9/+MNYtWrVRn0vzz33XJx11lmx9957R+vWraOkpKTR9W+//fbo169fVFRUxGc/+9m48cYbN2o/0FK1yjoAFJOKioqYOnVqfOELX2iwfObMmfHOO+9EeXn5Bh97/fXXx5lnnhlt27Zt8n5/9KMfxdixY2PYsGFx0UUXRdu2beONN96I//7v/4677747Dj300Lj44ovjtNNOq3/M3Llz42c/+1n8x3/8R/Tr169++e67777effziF7+IMWPGRKtW639a2G677eLtt9/ObD0AYMt49NFH45hjjony8vI4+eSTY8CAAVFbWxuzZ8+OsWPHxp///Oe49dZbG93GQQcdFCeffHKDZZWVlQ2+vu++++rLhilTpsSVV1653m2Vl5fHL3/5y4iIWLJkSTz00ENxxRVXxJtvvhlTpkzJ+/387ne/i1/+8pex++67R58+feK1117b4Lq33HJLnHHGGfGNb3wjxowZE7NmzYpzzz03VqxYERdeeOEGH/fnP/85Bg0aFG3atFnv/bW1tfHqq6/GqlWrMllv55133mB2aLYEyOuOO+5IIiI5+uijk+222y5ZvXp1g/tPP/30ZO+990522mmn5LDDDmtwX0Qke+65ZxIRycSJE9e73blz59Yvu/TSS5OISD788MMkSZJk9erVSYcOHZKDDjpovdk++OCD9S6/7777kohInnjiiY36Hm+88cbk4osvXu99K1euTD7zmc9kuh4AsPm99dZbSfv27ZO+ffsm77333jr3v/7668kNN9xQ//WGZp9Ro0bl3dfQoUOTo48+Ojn//POT3r17r3edkSNHJu3atWuwLJfLJZ///OeTkpKSZNGiRXn3s2jRomTFihVJkiTJqFGjkg39CrRixYqkc+fO63w/J554YtKuXbvk448/3uA+Xn755WTIkCEbvH+//fZLXn/99czWg83J2x+gCY4//vj4xz/+EdOnT69fVltbG7/97W/jhBNO2ODjhgwZEl/60pfiuuuua3DK4Mb46KOPorq6OoYMGbLe+7t06dKk7QEAbMh1110Xy5Yti9tvvz26deu2zv277LJLjB49utn7+fvf/x6zZs2K4447Lo477rj461//Gk8//fRGPbakpCS+8IUvRJIk8dZbb+Vdv2vXruucJbE+TzzxRPzjH/+Is846q8HyUaNGxfLly+PRRx/dqHzQ0igVoAl69eoV+++/f9x11131yx577LFYsmRJHHfccY0+dvz48fHBBx/EpEmTmrTPLl26RGVlZTzyyCPx8ccfp8oNALAxHnnkkejTp08ccMABzdrOqlWr4qOPPmpwq6mpqb//rrvuinbt2sXhhx8e++67b+y8884b9VaGtda+NbJTp07NyvmvXnjhhYiIGDx4cIPle++9d5SWltbfDzSkVIAmOuGEE+LBBx+sP+NgypQpMWzYsOjevXujj/viF78Yw4cPj+uvv75JZyuUlpbG2LFjY968edGzZ8/46le/GldffXXMnz+/Wd8HAMC/qq6ujnfffTcGDhzY7G3dfvvtsf322ze4/esfZaZMmRJHHnlk/RkE3/rWt+Lee++NNWvWrHd7a4uJN998MyZOnBj3339/DBgwIHbddddmZ13r/fffj7KysnXOAm3Tpk107tw53nvvvU22L9iaKBWgiY499thYuXJlTJs2LZYuXRrTpk1r9K0P/2r8+PGxaNGiuPnmm5u0z8suuyymTp0agwYNiscffzwuvvji2HvvvWOvvfba4NWSAQCaorq6OiIiqqqqmr2tI488MqZPn97gdsghh0RExJ/+9Kd4+eWX4/jjj69f//jjj4+PPvooHn/88XW2tXz58vpiYpdddokLLrgghgwZEg899FDeT3JoipUrV27wgocVFRVNfgsrtBQ+/QGaaPvtt48RI0bE1KlTY8WKFVFXVxff/OY3N+qxQ4cOjeHDh8d1110XZ5xxRpP2e/zxx8fxxx8f1dXV8eyzz8bkyZNj6tSpccQRR8Qrr7wSFRUVab4dAICIiOjQoUNERCxdurTZ29pxxx1jxIgR673vN7/5TbRr1y769OkTb7zxRkT885f2Xr16xZQpU+Kwww5rsH5FRUU88sgjERHxzjvvxHXXXReLFy9ucJ2EZcuWxbJly+q/Lisri+23375JmSsrK6O2tna9961atWqjrssALZFSAVI44YQT4vTTT49FixbFV77yldhmm202+rGXXnppHHjggXHLLbc06XFrdejQIQ466KA46KCDonXr1nHnnXfGs88+G8OGDWvytgAA1urQoUN07949Xnnllc22jyRJ4q677orly5dH//7917l/8eLFsWzZsmjfvn39srKysgYFxSGHHBJ9+/aN733ve/Hwww9HxD8/fvuyyy6rX2ennXZq8kdSd+vWLerq6mLx4sUN3gJRW1sb//jHP/K+1RVaKm9/gBS+/vWvR2lpacyZM2ej3/qw1rBhw+LAAw+Ma6+9ttmn0a29kND777/frO0AAEREHH744fHmm2/GM888s1m2P3PmzHjnnXfi8ssvj/vuu6/B7dZbb40VK1bEgw8+2Og2unXrFueff3488sgjMWfOnIiIOPnkkxu81aIpF31ca88994yIiOeff77B8ueffz5yuVz9/UBDzlSAFNq3bx+TJk2Kt99+O4444ogmP378+PFx4IEHxq233pp33RUrVsRLL70U+++//zr3PfbYYxERm/QiRQBAy/WDH/wgpkyZEqeddlr84Q9/iK5duza4/80334xp06al/ljJtW99GDt27Hrfunn99dfHlClT4qSTTmp0O+ecc05cf/31cc0118SDDz4Yffr0iT59+qTKtNaXvvSl2HbbbWPSpEnx1a9+tX75pEmTom3btuu8LQP4J6UCpDRy5MjUjx02bFgMGzYsZs6cmXfdFStW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3z569OgR999/f0RELFiwIN5///346U9/GhEREyZMiP/8z/+Mm2++Of785z/H+eefHyeddFLMnDkzIv75An/00UfHEUccES+++GKcdtppMW7cuM112ACArZTZCIpQAmwRI0eOTI488sgkSZIkl8sl06dPT8rLy5MLLrggGTlyZNK1a9ekpqamfv1f//rXya677prkcrn6ZTU1NUllZWXy+OOPJ0mSJN26dUuuu+66+vtXr16d7LjjjvX7SZIkGTZsWDJ69OgkSZJkwYIFSUQk06dPX2/GJ554IomI5JNPPqlftmrVqqRt27bJ008/3WDd7373u8nxxx+fJEmSXHTRRUn//v0b3H/hhReusy0AgLXMRrB1cE0F2IKmTZsW7du3j9WrV0cul4sTTjghxo8fH6NGjYqBAwc2eK/gSy+9FG+88UZUVVU12MaqVavizTffjCVLlsT7778f++23X/19rVq1isGDB69zmt9aL774YpSVlcWwYcM2OvMbb7wRK1asiIMOOqjB8tra2hg0aFBERLz66qsNckRE7L///hu9DwCgZTIbQfFTKsAWNHz48Jg0aVK0adMmunfvHq1a/d9/wXbt2jVYd9myZbH33nvHlClT1tnO9ttvn2r/lZWVTX7MsmXLIiLi0Ucfjc985jMN7isvL0+VAwAgwmwEWwOlAmxB7dq1i1122WWj1t1rr73innvuiS5dukSHDh3Wu063bt3i2WefjaFDh0ZExJo1a2LevHmx1157rXf9gQMHRi6Xi5kzZ8aIESPWuX/tXwPq6urql/Xv3z/Ky8vj73//+wZb/H79+sXDDz/cYNmcOXPyf5MAQItmNoLi50KNUKBOPPHE2G677eLII4+MWbNmxV//+td48skn49xzz4133nknIiJGjx4d11xzTTz44IPxl7/8Jc4666xGP0e5V69eMXLkyPjOd74TDz74YP0277333oiI2GmnnaKkpCSmTZsWH374YSxbtiyqqqriggsuiPPPPz/uvPPOePPNN2P+/Plx4403xp133hkREWeccUa8/vrrMXbs2FiwYEFMnTo1Jk+evLkPEQDQgpiNoDApFaBAtW3bNp566qno2bNnHH300dGvX7/47ne/G6tWrapv57///e/Ht7/97Rg5cmTsv//+UVVVFV//+tcb3e6kSZPim9/8Zpx11lnRt2/fOP3002P58uUREfGZz3wmLrvsshg3blx07do1zj777IiIuOKKK+KSSy6JCRMmRL9+/eLQQw+NRx99NHr37h0RET179oz7778/Hnzwwdhjjz3i5ptvjquvvnozHh0AoKUxG0FhKkk2dNUSAAAAgEY4UwEAAABIRakAAAAApKJUAAAAAFJRKgAAAACpKBUAAACAVJQKAAAAQCpKBQAAACAVpQIAAACQilIBAAAASEWpAAAAAKSiVAAAAABSUSoAAAAAqfz/sXORDrqr4PYAAAAASUVORK5CYII="
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 7
  },
  {
   "metadata": {},
   "cell_type": "code",
   "outputs": [],
   "execution_count": null,
   "source": "",
   "id": "fe71f3ee2b6419e1"
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
